<?php

Loader::using("models::entities::CompetenciasPracticantes");

/**
 * Description of EvaluarCompetenciasPracticante
 *
 * @author Virtualidad
 * @export Modules
 */
class EvaluarCompetenciasPracticante extends Module {

    private $Results = array();
    private $IdPracticante;

    public function index() {
        $Solicitudes = $this->model->applications->GetByEstado(EstadoSolicitud::Procesada);

        $this->assign("solicitudes", $Solicitudes);
        $this->assign("evaluarInicial", $this->route->action("realizarEvaluacionInicial", array("IdPracticante" => "",)));
        $this->assign("evaluarFinal", $this->route->action("realizarEvaluacionFinal", array("IdPracticante" => "",)));

        $this->display("index");
    }

    public function realizarEvaluacionInicial() {
        $this->assignPracticante();
        $competencias = $this->model->skills->GetInicial();
        $this->assignCompetencias($competencias);
        $this->addMessage(new Message(
                        "Este formulario debe diligenciarse una vez el estudiante en pr&aacute;cticas empresariales tenga m&iacute;nimo 3 semanas de haberse incorporado en la empresa. El objetivo de su dise&ntilde;o consiste en hacerle un seguimiento a la labor desempe&ntilde;ada por nuestros estudiantes y tomar las medidas anticipadas o correctivas con el fin de mejorar continuamente.",
                        "Se&ntilde;or empresario:",
                        Message::INFO));

        $this->assign("cancel", $this->route->action("index"));
        $this->assign("action", $this->route->action("guardarEvaluacionInicial"));

        $this->display();
    }

    public function realizarEvaluacionFinal() {
        $this->assignPracticante();
        $competencias = $this->model->skills->GetFinal();
        $this->assignCompetencias($competencias);
        $this->addMessage(new Message(
                        "Este formulario refleja la evaluaci&oacute;n final y definitiva del estudiante en pr&aacute;cticas profesionales.  Se diligencia y env&iacute;a con una semana de anterioridad a las fechas estipuladas en el calendario acad&eacute;mico para los ex&aacute;menes finales del semestre. La evaluaci&oacute;n obtenida de la pr&aacute;ctica empresarial representa la valoraci&oacute;n para aprobaci&oacute;n de dicha asignatura.",
                        "Se&ntilde;or empresario:",
                        Message::INFO));

        $this->assign("cancel", $this->route->action("index"));
        $this->assign("action", $this->route->action("guardarEvaluacionFinal"));

        $this->display();
    }

    public function guardarEvaluacionInicial() {
        $this->guardarEvaluacion();
        $this->addMessage(new Message("El estudiante ha sido evaluado correctamente.", "Listo:", Message::SUCCESS));
        $this->index();
    }

    public function guardarEvaluacionFinal() {

    }

    /**
     * @export-metadata Bind:this
     */
    private function guardarEvaluacion() {
        $competencias = array();
        foreach($this->Results as $idCompetencia => $evaluacion){
            $evaluacion = new CompetenciasPracticantes();
            $evaluacion->setIdCompetencia($idCompetencia);
            $evaluacion->setEvaluacion($evaluacion);
            $evaluacion->setIdPracticante($this->IdPracticante);
            $competencias[] = $evaluacion;
            $this->model->capacitiespractitioners->Insert($evaluacion);
        }
    }

    private function assignPracticante() {
        $idPracticante = $this->request->get("IdPracticante");
        $practicante = $this->model->practitioners->GetById($idPracticante);

        $this->assign("practicante", $practicante);
    }

    private function assignCompetencias($competencias) {
        $competenciasList = array();
        foreach (TipoCompetencia::values() as $tipo) {
            $competenciasList[$tipo] = array();
        }
        /* @var $competencia Competencias */
        foreach ($competencias as $competencia) {
            $competenciasList[$competencia->getTipoCompetencia()][] = $competencia;
        }

        $this->assign("competencias", $competenciasList);
    }

    public function getResults() {
        return $this->Results;
    }

    public function setResults($Results) {
        $this->Results = $Results;
    }

    public function getIdPracticante() {
        return $this->IdPracticante;
    }

    public function setIdPracticante($IdPracticante) {
        $this->IdPracticante = $IdPracticante;
    }
}

?>
